class Solution {

    /**
     * 盛装最多水的容器
     * @param height
     * @return
     */
    public int maxArea(int[] height) {
        int left=0;
        int right=height.length-1;
        int ret=0;
        while(left<right){
            int v=Math.min(height[left],height[right])*(right-left);
            ret=Math.max(ret,v);
            if(height[left]<=height[right]){
                left++;
            }else{
                right--;
            }
        }
        return ret;
    }

    /**
     * 复写0
     * @param arr
     */
    public void duplicateZeros(int[] arr) {
        int n=arr.length;
        int cur = 0;
        int dest = -1;
        //用cur遍历数组，找到最后一个需要复习的数字
        while(cur<n){
            if(arr[cur]==0){
                dest+=2;
            }else{
                dest++;
            }
            if(dest>=n-1){
                break;
            }
            cur++;
        }
        //处理一下边界特殊情况
        if(dest==n){
            arr[n-1]=0;
            dest-=2;
            cur--;
        }
        //从后往前复写
        while(cur>=0){
            if(arr[cur]!=0){
                arr[dest--]=arr[cur--];
            }else{
                arr[dest--]=0;
                arr[dest--]=0;
                cur--;
            }
        }
    }
    /**
     * 移动零
     * @param nums
     */
    public void moveZeroes(int[] nums) {
        for(int dest=-1,cur=0;cur<nums.length;cur++){
            if(nums[cur]!=0){
                dest++;
                int temp=nums[dest];
                nums[dest]=nums[cur];
                nums[cur]=temp;
            }
        }
    }
}
